

\paragraph{}
En este proyecto hemos hecho uso de varios patrones, como son el patrón <<facade>>, el patrón <<composite>>, el patrón <<singleton>>, y el patrón <<DAO>>, los cuales explicaremos en breve.
\paragraph{}
Estos patrones son patrones de diseño, los cuales pretenden:
\begin{list}{•}{}
\item Proporcionar catálogos de elementos reusables en el diseño de sistemas software.
\item Evitar la reiteración en la búsqueda de soluciones a problemas ya conocidos y solucionados anteriomente.
\item Estandarizar el modo en que se realiza el diseño.
\end{list}


\section{Patrón Singleton}
\paragraph{}
El patrón Singleton está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto. Por tanto, su fin es garantizar que de una clase solo se instancia un objeto.

\paragraph{}
En nuestra aplicación lo hemos usado a la hora de crear el objeto que permite reproducir   una canción. Concretamente, hemos creado la clase
 <<SingletonPlayer>>, que tiene una instancia de la misma y que proporciona un objeto de tipo <<JMFplayer>>, el cual se encarga de la reproducción musical.
\paragraph{}
Hemos considerado idóneo el uso de este patrón ya que nos ha permitido poder acceder al objeto reproductor desde cualquier lugar de la aplicación. Es un objeto que tiene presencia en numerosas partes del código (interfaz, biblioteca...), y en lugar de enviarlo desde una clase a otra a través de paso de argumentos en métodos hemos podido acceder a él sin hacer uso de ello, lo cual ha simplificado bastante el tratamiento del mismo.

\begin{center}
\includegraphics[scale=0.65]{singleton.ps}
\end{center}

\section{Patrón DAO}
\paragraph{}
El patrón <<DAO>> busca proporcionar una interfaz de acceso a varias clases que proporcionen datos a la aplicación, de tal manera que si cambiamos la forma concreta una de nuestras bases de datos, simplemente con cambiar dicha interfaz bastaría para solucionarlo.
\paragraph{}
En nuestra aplicación, se puede ver el uso de este patrón en la clase <<TrollingLibrary>> del paquete <<Biblioteca>>. Desde esta clase, podemos acceder a los datos que nos proporciona el fichero XML utilizado, pero si quisiésemos almacenar más datos o en otro tipo de ficheros, nos bastaría con cambiar esa clase nada más, es por ello que hemos creido oportuno la utilización del patrón.


\section{Patrón Facade}
\paragraph{}
Este patrón se utiliza para proporcionar una interfaz unificada de alto nivel para un conjunto de clases en un subsistema, haciéndolo más fácil de usar. Simplifica el acceso a dicho conjunto de clases, ya que el cliente sólo se comunica con ellas a través de una única interfaz.

\paragraph{}
Hemos considerado importante aplicar este patrón en nuestra práctica ya que a la hora de tratar varios tipos de ficheros como OGG o MP3, hemos recogido el acceso a ambos tipos de formato desde <<SmartMusicData>>, simplificando el tratamiento de los mismos. El patrón <<Composite>> también hace está presente en la misma clase, pero se utilizará junto con otras clases, que comentaremos a continuación.

\section{Patrón Composite}
\paragraph{}
Este patrón busca construir objetos complejos a partir de otros más simples y similares entre sí. Esto simplifica el tratamiento de los objetos creados, ya que al poseer todos ellos una interfaz común, se tratan todos de la misma manera.
\paragraph{}
En nuestra aplicación se puede observar a la hora de tratar los datos de las canciones,dichas acciones se recogen en una sola clase, lo que simplifica su acceso y tratamiento creando una capa que pueda ser accedida desde cualquier clase que necesite dichos datos. Dicha clase de la que hablamos es <<SmartMusicData>> y es la clase <<Cancion>> la que accede a la misma para obtener la información.








